﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.SqlServer.Management.Smo;

namespace QuanLyRapChieuPhim.GUI
{
    public partial class ucsBackupAndRestore : UserControl
    {
        public ucsBackupAndRestore()
        {
            InitializeComponent();
        }
        private SqlCommand cmd;
        private SqlConnection con;
        private SqlDataReader da;

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (progressBar1.Value == 100)
            {
                timer1.Stop();
                progressBar1.Visible = false;
                //MessageBox.Show("Thành công !", "Thông báo");
            }
            else
            {
                progressBar1.Value = progressBar1.Value + 10;
            }
        }

        public void Load_cbx()
        {
            cbLoai.Items.Clear();
            cbLoai.Items.Add(".");
            cbLoai.Items.Add(".\\SQLEXPRESS");
        }

        public void LoadServer(string _str)
        {
            try
            {
                con = new SqlConnection("Data Source=" + _str + ";Database=master;integrated security=SSPI;");
                con.Open();
                cmd = new SqlCommand("select *  from sysservers  where srvproduct='SQL Server'", con);
                //da = new SqlDataReader();
                da = cmd.ExecuteReader();
                while (da.Read())
                {
                    cbTen.Items.Add(da[2]);
                }
                da.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("SQL Server có thể không có loại server này vui lòng chọn loại server khác !!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        public void Connection_SQL()
        {
            try
            {
                con = new SqlConnection("Data Source=" + (cbTen.Text) + ";Database=master;integrated security=SSPI;");
                con.Open();
                cbCSDL.Items.Clear();
                cmd = new SqlCommand("select * from sysdatabases", con);
                //da = new SqlDataReader();
                da = cmd.ExecuteReader();
                while (da.Read())
                {
                    cbCSDL.Items.Add(da[0]);
                }
                da.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Không kết nối được", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        public void Query_BR(string _str) 
        {
            try
            {
                cmd = new SqlCommand(_str, con);
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi !!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }



        public void Action_BR(string _str)
        {
            if (_str == "backup")
            {
                if (cbTen.Text == "" || cbCSDL.Text == "")
                {
                    MessageBox.Show("Chưa chọn tên sever và tên cơ sỡ dữ liệu !!");
                    return;
                }
                else
                {
                    saveFileDialog1.FileName = cbCSDL.Text;
                    saveFileDialog1.Title = "Lưu tập tin cần sao lưu";
                    DialogResult re = saveFileDialog1.ShowDialog();
                    if (re == DialogResult.Cancel)
                    {
                        return;
                    }
                    else
                    {
                        timer1.Enabled = true;
                        progressBar1.Visible = true;
                        string s;
                        s = saveFileDialog1.FileName;
                        Query_BR("BACKUP DATABASE " + cbCSDL.Text + " to disk='" + s + "'");
                        MessageBox.Show("Thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
            else if (_str == "restore")
            {
                openFileDialog1.Title = "Chọn tập tin cần phục hồi";
                openFileDialog1.RestoreDirectory = true;
                DialogResult re = openFileDialog1.ShowDialog();
                if (re == DialogResult.Cancel)
                {
                    return;
                }
                else
                {
                    timer1.Enabled = true;
                    progressBar1.Visible = true;
                    Query_BR("RESTORE DATABASE " + cbCSDL.Text + " FROM disk='" + openFileDialog1.FileName+"'");
                    MessageBox.Show("Thành công","Thông báo",MessageBoxButtons.OK ,MessageBoxIcon.Information );
                }
            }
        }

        private void ucsBackupAndRestore_Load(object sender, EventArgs e)
        {
            Load_cbx();
            progressBar1.Visible = false;
        }

        private void cbLoai_SelectedIndexChanged(object sender, EventArgs e)
        {
            int index = cbLoai.SelectedIndex;
            if (index != -1)
            {
                if (index == 0)
                {
                    cbTen.Items.Clear();
                    LoadServer(cbLoai.Text);
                }
                else
                {
                    cbTen.Items.Clear();
                    LoadServer(cbLoai.Text);
                }
            }
        }

        private void cbTen_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                //cbTen.Items.Clear();
                Connection_SQL();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Không kết nối được", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void btnBackup_Click(object sender, EventArgs e)
        {
            try
            {
                Action_BR("backup");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Backup lỗi !!", "Thông báo");
            }
        }

        private void btnRestore_Click(object sender, EventArgs e)
        {
            try
            {
                Action_BR("restore");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Restore lỗi !!", "Thông báo");
            }
        }
    }
}
